package com.xmmj.baselibrary.base.fragment

import android.os.Bundle
import com.trello.rxlifecycle3.components.support.RxFragment

/**
 * 支持懒加载的Fragment
 * （当且仅当用FragmentPagerAdapter来装载Fragment时，懒加载才有效；
 * 如果需要懒加载功能，请重写onLazyLoad方法去请求数据或初始化组件）
 */
open class LazyFragment : RxFragment() {
    //Fragment的View加载完毕的标记
    private var isViewCreated = false

    //Fragment对用户可见的标记
    private var isUIVisible = false

    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)
        isViewCreated = true
        onVisible()
    }

    override fun setUserVisibleHint(isVisibleToUser: Boolean) {
        super.setUserVisibleHint(isVisibleToUser)
        if (isVisibleToUser) { //可见
            isUIVisible = true
            onVisible()
        } else {
            isUIVisible = false
        }
    }

    private fun onVisible() {
        //这里进行双重标记判断,是因为setUserVisibleHint会多次回调,
        //并且会在onCreateView执行前回调,必须确保onCreateView加载完毕且页面可见,才加载数据
        if (isViewCreated && isUIVisible) {
            onLazyLoad()
            //数据加载完毕,恢复标记,防止重复加载
            isViewCreated = false
            isUIVisible = false
        }
    }

    open fun onLazyLoad() {

    }
}